package main

import (
	"fmt"
	"os"
	"os/signal"
	"syscall"
)

/*
signal 包中提供了两个函数
Notify 用于监听信号
Stop 用于停止型号

syscall 为系统信号

*/
func main() {
	ch := make(chan os.Signal, 1)
	// os.Interrupt 为挂断信号
	signal.Notify(ch, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGSTOP, syscall.SIGUSR1, os.Interrupt)
	for {
		// 信道接收信号
		// 如果没有会一直阻塞在这里。
		s := <-ch
		switch s {
		case syscall.SIGQUIT:
			fmt.Println("SIGSTOP")
			return
		case syscall.SIGSTOP:
			fmt.Println("SIGSTOP")
			return
		case syscall.SIGHUP:
			fmt.Println("SIGHUP")
			return
		case syscall.SIGKILL:
			fmt.Println("SIGKILL")
			return
		case syscall.SIGUSR1:
			fmt.Println("SIGUSR1")
			return
		case os.Interrupt:
			//通过 ctrl + c 或者 kill 命令来触发
			fmt.Println("Interrupt .....")
			return
		default:
			fmt.Println("default")
			return
		}
	}
}
